草庐IT

Android ArrayList迭代

全部标签

c++ - 将迭代器转换为 int

inti;vectornames;strings="penny";names.push_back(s);i=find(names.begin(),names.end(),s);cout我正在尝试查找vector中元素的索引。iterators没问题,但我希望它是int。我该怎么做? 最佳答案 您可以使用std::distance为此。i=std::distance(names.begin(),std::find(names.begin(),names.end(),s));不过,您可能想要检查您的索引是否超出范围。if(i==name

c++ - 迭代器有效性,在 std::set 中调用 erase() 之后

是否在std::setinvalidateiterator中调用erase?正如我在最后一行的第5名以下所做的那样..?如果是,从集合中删除所有元素的更好方法是什么classclassA{public:classA(){};~classA(){};};structstructB{};typedefstd::setSETTYPE;typedefstd::mapMAPTYPE;int__cdeclwmain(intargc,wchar_t*pArgs[]){MAPTYPEmapObj;/*.....SomeOperationHere...*/for(MAPTYPE::iteratoritr

c++ - 为什么 Boost.Range is_sorted 不需要前向迭代器?

C++11算法std::is_sorted和std::is_sorted_until都需要ForwardIterator。然而,Boost.Range版本boost::is_sorted只需要与InputIterator相对应的SinglePassRange。特别是,它委托(delegate)给一个基于迭代器的实现,如下所示:templateinlineIteratoris_sorted_until(Iteratorfirst,Iteratorlast,Compc){if(first==last)returnlast;Iteratorit=first;++it;for(;it!=las

c++ - 如何为自定义模板化迭代器实现 std::distance()?

我有一个模板化的双向迭代器。我不想让它随机访问,因为it+=n操作不会是常数时间。但是,it2-it1操作是常数时间。我想为这个迭代器专门化std::distance()以便使用它的算法(例如std::vector::assign())可以利用有效的差异操作。如果迭代器是模板,我该怎么做?这是一个玩具示例:#include#include//templatebidirectionaliteratortemplateclassiter:publicstd::iterator{T*ptr;public:iter(T*ptr):ptr(ptr){}iter()=default;iter(co

c++ - 迭代器中的代理对象

我有属于某个类别的大量项目vector。structitem{intclass_id;//someotherdata...};相同的class_id可以在vector中出现多次,vector构造一次后按class_id排序。因此同一类的所有元素在vector中彼此相邻。我稍后必须处理每个类的项目,即。我更新了同一类的所有项目,但没有修改不同类的任何项目。由于我必须对所有项目执行此操作,并且代码可以简单地并行化,因此我想将MicrosoftPPL与Concurrency::parallel_for_each()结合使用。因此,我需要一个迭代器并想出了一个前向迭代器,它返回具有特定clas

c++ - 通过 BOOST_FOREACH 使我的 C++ 类可迭代

我有一个类,我想公开一个结构列表(其中只包含一些整数)。我不想让外界修改这些数据,只是遍历它并读取它们示例:structTestData{intx;inty;//otherdataaswell}classIterableTest{public://exposeTestDatahere};现在在我的代码中我想像这样使用我的类:IterableTesttest;BOOST_FOREACH(constTestData&data,test.data()){//dosomethingwithdata}我已经读过这篇文章http://accu.org/index.php/journals/1527

C++ - 迭代元组和类型解析与常量参数

我目前正在为元组编写算术运算符重载。运算符遍历元组以对其每个单独的元素执行操作。这是运算符+=的定义:templateinlinetypenamestd::enable_if&>::typeoperator+=(std::tuple&lhs,conststd::tuple&rhs){returnlhs;}templateinlinetypenamestd::enable_if&>::typeoperator+=(std::tuple&lhs,conststd::tuple&rhs){std::get(lhs)+=std::get(rhs);returnoperator+=(lhs,rh

c++ - 结束的随机访问迭代器可以递增零吗?

标题说明了一切。给定一个迭代器结束,它可以在不调用未定义行为的情况下递增零吗?恰当的例子-如果索引超出范围,以下代码是否可以将迭代器返回到指定的索引-或者end?std::vector::iteratorClass::fromIndex(size_tindex){returnmember_vector.begin()+std::min(index,member_vector.size());}如果std::advance或std::next的行为不同,那也很有趣,但在这里我特别感兴趣的是运算符+。 最佳答案 这是一个定义明确的空操作

c++ - 如何使用自动变量选择迭代器类型?

我有一个std::unordered_mapstd::unordered_mapmyMap;我想使用find获得一个const迭代器。在c++03中我会做std::unordered_map::const_iterator=myMap.find("SomeValue");在c++11中,我想使用auto来减少模板数量auto=myMap.find("SomeValue");这是const_iterator还是迭代器?编译器如何决定使用哪个?有没有办法强制它选择const? 最佳答案 如果myMap是一个非常量表达式,它将使用非常量迭

c++ - std::list 与 std::vector 迭代

据说由于优化了缓存,遍历一个vector(如读取它的所有元素)比遍历一个列表更快。网络上是否有任何资源可以量化它对性能的影响程度?此外,使用自定义链表是否会更好,哪些元素将被预先分配以便它们在内存中是连续的?背后的想法是我想以不会改变的特定顺序存储元素。我仍然需要能够在运行时在中间快速插入一些,但大多数仍然是连续的,因为顺序不会改变。元素是连续的这一事实是否对缓存有影响,或者因为我仍将调用list_element->next而不是++list_element它会没有任何改善? 最佳答案 vector和列表之间的主要区别在于,在vec